/*
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year>  <name of author>

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

*/

#ifndef RENDERENGINE_H
#define RENDERENGINE_H

#include "Singleton.h"
#include <Windows.h>
#include <GL/gl.h>

#include "BaseTypes.h"

class QMouseEvent;

class RenderEngine : public Singleton<RenderEngine>
{
   friend class Singleton<RenderEngine>;
   friend class RenderManager;

protected :

   RenderEngine();

   virtual ~RenderEngine();

protected : 

   /** Initialise OpenGL */
   void init();

   /** Draw the OpenGL scene */
   void BeginDraw();

   /** Resize the window
   @width The new width.
   @height The new height
   */
   void resize(int width, int height);

   void setOrtho(uint iXMinOrtho = 0, uint iYMinOrtho = 0, uint iXMaxOrtho = 10, uint iYMaxOrtho = 10);

   void drawSprite(const GLuint & iOpenGLTextureID, const float2 & iTexCoordBL, const float2 & iTexCoordTL,
                   const float2 & iTexCoordTR, const float2 & iTexCoordBR, const quadrangle & iQuad);

   uint CreateTexture(unsigned char * iData, const int iWidth, const int iHeight);


protected :

   int _xMinOrtho;//GL ORTHO !
   int _xMaxOrtho;
   int _yMinOrtho;
   int _yMaxOrtho;

   GLuint _curTexBound;
};

#endif // RENDERENGINE_H
